package com.obas.model.type;

import com.ease.actionscript.Remoting;
import com.ease.common.enums.EnumUtil;
import com.ease.common.enums.NamedEnum;

/**
 * 
 * @author nathanleewei
 * 
 */
@Remoting(false)
public enum AnalogyDimensionAttributeType implements NamedEnum {

	USER(AnalogyDimensionType.USER, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					DimensionAttributeType.CUSTOMER_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
//					DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //
	
	USERAPP(AnalogyDimensionType.USERAPP, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					DimensionAttributeType.CUSTOMER_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //
	USERSVC(AnalogyDimensionType.USERSVC, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					DimensionAttributeType.CUSTOMER_ID,//

					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //

	BANDTAPP(AnalogyDimensionType.BANDTAPP, new DimensionAttributeType[] {//
			//
					DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					DimensionAttributeType.BANDWIDTHTYPE_ID,//

					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //
	BANDTSVC(AnalogyDimensionType.BANDTSVC, new DimensionAttributeType[] {//
			//
					DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					DimensionAttributeType.BANDWIDTHTYPE_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //

	APP(AnalogyDimensionType.APP, new DimensionAttributeType[] {//
			//
					DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//

			}), //
	SVC(AnalogyDimensionType.SVC, new DimensionAttributeType[] {//
			//
					DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//
			}), //
	ROUTE(AnalogyDimensionType.ROUTE, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
			// DimensionAttributeType.CUSTOMER_ID,//
			// DimensionAttributeType.DEVICE_ID,//
			DimensionAttributeType.ROUTE_ID,//
			// DimensionAttributeType.IPSOURCE,//
			// DimensionAttributeType.PORTSOURCE,//
			// DimensionAttributeType.IPDESTINATION,//
			// DimensionAttributeType.PORTDESTINATION,//
			// DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//
			}), //
	SVLAN(AnalogyDimensionType.SVLAN, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
			// DimensionAttributeType.CUSTOMER_ID,//
			// DimensionAttributeType.DEVICE_ID,//
			// DimensionAttributeType.IPSOURCE,//
			// DimensionAttributeType.PORTSOURCE,//
			// DimensionAttributeType.IPDESTINATION,//
			// DimensionAttributeType.PORTDESTINATION,//
			// DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//
			}), //
	PORT(AnalogyDimensionType.PORT, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					// DimensionAttributeType.APPIDENTITY,//
					DimensionAttributeType.PORT_ID,//
					// DimensionAttributeType.SVLAN_ID,//
					// DimensionAttributeType.CVLAN,//
			}), //
	DEVICE(AnalogyDimensionType.DEVICE, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
			// DimensionAttributeType.CUSTOMER_ID,//
			DimensionAttributeType.DEVICE_ID,//
			// DimensionAttributeType.IPSOURCE,//
			// DimensionAttributeType.PORTSOURCE,//
			// DimensionAttributeType.IPDESTINATION,//
			// DimensionAttributeType.PORTDESTINATION,//
			// DimensionAttributeType.SVCIDENTITY,//
			// DimensionAttributeType.APPIDENTITY,//
			// DimensionAttributeType.PORT_ID,//
			// DimensionAttributeType.SVLAN_ID,//
			// DimensionAttributeType.CVLAN,//
			}), //
	DEVICEAPP(AnalogyDimensionType.DEVICEAPP, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					DimensionAttributeType.APPIDENTITY,//
					// DimensionAttributeType.PORT_ID,//
					// DimensionAttributeType.SVLAN_ID,//
					// DimensionAttributeType.CVLAN,//
			}), //
	DEVICESVC(AnalogyDimensionType.DEVICESVC, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					// DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					DimensionAttributeType.SVCIDENTITY,//
					// DimensionAttributeType.APPIDENTITY,//
					// DimensionAttributeType.PORT_ID,//
					// DimensionAttributeType.SVLAN_ID,//
					// DimensionAttributeType.CVLAN,//
			}), //
	DNSAPP(AnalogyDimensionType.DNSAPP, new DimensionAttributeType[] {//
			//
			 DimensionAttributeType.LOCATION_ID,//
					// DimensionAttributeType.CUSTOMER_ID,//
					// DimensionAttributeType.DEVICE_ID,//
					// DimensionAttributeType.IPSOURCE,//
					// DimensionAttributeType.PORTSOURCE,//
					DimensionAttributeType.IPDESTINATION,//
					// DimensionAttributeType.PORTDESTINATION,//
					// DimensionAttributeType.SVCIDENTITY,//
					DimensionAttributeType.APPIDENTITY,//
					// DimensionAttributeType.PORT_ID,//
					// DimensionAttributeType.SVLAN_ID,//
					// DimensionAttributeType.CVLAN,//
			})//
	; //

	private AnalogyDimensionType analogyDimensionType;

	private DimensionAttributeType[] dimensionAttributeTypes;

	private AnalogyDimensionAttributeType(AnalogyDimensionType analogyDimensionType, DimensionAttributeType[] dimensionAttributeTypes) {
		this.analogyDimensionType = analogyDimensionType;
		this.dimensionAttributeTypes = dimensionAttributeTypes;
	}

	public static DimensionAttributeType[] getByAnalogyDimensionType(AnalogyDimensionType analogyDimensionType) {
		for (AnalogyDimensionAttributeType e : AnalogyDimensionAttributeType.class.getEnumConstants()) {
			if (e.getAnalogyDimensionType().equals(analogyDimensionType)) {
				// TODO orderby
				return e.getDimensionAttributeTypes();
			}
		}
		return null;
	}

	public static AnalogyDimensionAttributeType get(String name) {
		return EnumUtil.get(AnalogyDimensionAttributeType.class, name);
	}

	public String getName() {
		return name();
	}

	/**
	 * @return the analogyDimensionType
	 */
	public AnalogyDimensionType getAnalogyDimensionType() {
		return analogyDimensionType;
	}

	/**
	 * @return the dimensionAttributeType
	 */
	public DimensionAttributeType[] getDimensionAttributeTypes() {
		return dimensionAttributeTypes;
	}

}
